const fs = require('fs');
const path = require('path');
// 主框架配置
export interface MainProjectConfigItem {
  // 主框架项目目录名，也作为生产主应用目录名
  rootDir: string;
  // 主框架项目内部构建目录名
  outputDir: string;
  // 主框架项目的子项目上级目录名
  buildChildParentName: string;
  // 开发命令，需要在框架根目录/package.json中scripts内配置好
  serveRun: string;
  // 构建命令，需要在框架根目录/package.json中scripts内配置好
  buildRun: string;
  // // 子项目名称(childProjectConfig的key)数组
  // subproject: string[];
}

// 子项目配置
export interface ChildProjectConfigItem {
  // 子项目目录名，也作为生产子应用目录名
  rootDir: string;
  // 子项目内部构建目录名
  outputDir: string;
  // 开发 localhost 或者 ip
  host: string;
  // 开发端口
  port: number;
  // 开发命令，需要在框架根目录/package.json中scripts内配置好
  serveRun: string;
  // 构建命令，需要在框架根目录/package.json中scripts内配置好
  buildRun: string;
}

export const mainProjectConfig: Record<string, MainProjectConfigItem> =
  require('../../main/public/qiankunRoutes.json').main;

const childProjectConfig: Record<string, ChildProjectConfigItem> = {};
export function getChildProjectConfig(): Record<
  string,
  ChildProjectConfigItem
> {
  if (Object.keys(childProjectConfig).length === 0) {
    const qiankunRoutesJson: { name: string; port: number }[] =
      require(`../../main/public/qiankunRoutes.json`).children;
    qiankunRoutesJson.map((item) => {
      const name: string = item.name as string;
      const config: ChildProjectConfigItem = {
        rootDir: name,
        outputDir: 'dist',
        host: 'localhost',
        port: item.port,
        serveRun: `serve:${name}`,
        buildRun: `build:${name}`,
      };
      childProjectConfig[name] = config;
    });
  }
  return childProjectConfig;
}

export const packagePath = 'packages';
const packagesDir = path.join(__dirname, '../../' + packagePath);
export function getAllChildName(): string[] {
  const result: string[] = [];
  try {
    let arr = fs.readdirSync(packagesDir);
    console.log(arr);
    arr.forEach((val: string, idx: any) => {
      let ph = fs.statSync(packagesDir + '/' + val);
      if (ph.isDirectory()) {
        result.push(val);
      }
    });
  } catch (error) {
    console.log(error);
  }
  return result;
}
